package com.ningju.procurement.common.dao;

import com.ningju.procurement.common.bean.BaseBean;

import java.util.List;

public interface BaseDao<T extends BaseBean> {
	
	/**
	 * 根据id查找记录
	 * @param id
	 * @return
	 */
	T find(Long id);
	
	/**
	 * 插入一条数据, 
	 * 使用该方法 需要这 mapper文件的 insertSelective 方法上加上
	 * useGeneratedKeys="true"
	 * keyProperty="id" 
	 * @param t
	 * @return
	 */
	Long insertSelective(T t);
	/**
	 * 插入一条数据, 只插入不为null的字段
	 * @param t
	 * @return
	 */
	int insert(T t);
	
	/**
	 * 批量插入数据
	 * @param datas
	 * @return
	 */
	int insertMulti(List<T> datas);
	
	/**
	 * 根据id更新数据
	 * @param t
	 * @return
	 */
	int updateById(T t);
	
	/**
	 * 根据id更新数据, 只会更新不是null的数据
	 * @param t
	 * @return
	 */
	int updateByIdSelective(T t);
	
	/**
	 * 根据id删除数据
	 * @param id
	 * @return
	 */
	int deleteById(Long id);

	/**
	 * 根据id列表批量删除
	 * @param ids
	 * @return
     */
	int deleteByIds(List<Long> ids);
	
	/**
	 * 返回总记录数
	 * @return
	 */
	long count();
	
	/**
	 * 返回所有记录
	 * @return
	 */
	List<T> selectAll();
	
	/**
	 * 获取指定id列表的记录
	 * @param ids
	 * @return
	 */
	List<T> selectByIds(List<Long> ids);
	/**
	 * 条件查询
	 * @param t 
	 * @return
	 */
	List<T> queryCriteria(T t);
	
}